package com.hqq.integration.message_channel;

import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Message-Channel 信息通道模式
 * 当两个应用程序使用信息进行交流,他们需要先建立一个信息通道来传输数据 信息通道降低了消息生产者和消费者之间的耦合
 * 发送端应用程序无需知道接受端是谁,只需要知道接受端是对这个信息感兴趣的即可。这是因为信息系统为不同类型的信息提供了不同的信息通道
 * 当一个应用发送信息时,把详细添加到传输该类信息的管道。接受应用从指定的的管道读取数据
 *
 * 以下这个例子使用了Apache的Camel建立两种不同类型的信息通道.
 * 第一个读取标准输入并且直接把信息发送到输出点。
 * 第二个信息通道建立在控制台的输出上 没有发送实际的数据
 * Created by heqianqian on 2017/8/18.
 */
public class App {

    private static final Logger LOGGER = LoggerFactory.getLogger(App.class);

    public static void main(String[] args) throws Exception {
        CamelContext camelContext = new DefaultCamelContext();
        camelContext.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("stream:in").to("direct:greetings");
                from("direct:greetings").to("stream:out");
            }
        });
        camelContext.start();
        camelContext.getRoutes().forEach(route -> LOGGER.info(route.toString()));
        camelContext.stop();
    }
}
